package com.example.clublesson01.fragments

import androidx.recyclerview.widget.LinearLayoutManager
import com.alibaba.android.arouter.launcher.ARouter
import com.blankj.utilcode.util.ToastUtils
import com.bw.kf.lib_base.base.BaseFragment
import com.example.clublesson01.R
import com.example.clublesson01.adapter.PlayCartInfoAdapter
import com.example.clublesson01.databinding.FragmentPalyCartBinding
import com.example.clublesson01.fragments.playcart.PlayCartViewModel
import com.flyco.tablayout.listener.CustomTabEntity
import com.flyco.tablayout.listener.OnTabSelectListener
import java.util.ArrayList


class PlayCartFragment : BaseFragment<FragmentPalyCartBinding, PlayCartViewModel>() {

    val playCartTopTabsList = ArrayList<CustomTabEntity>()
    val playCartInfoAdapter = PlayCartInfoAdapter()

    /**
     * 初始化视图组件和数据
     * 此方法主要用于初始化播放车顶部标签页的数据和监听器，以及设置RecyclerView的适配器和布局管理器
     */
    override fun iniView() {
        binding.playCartSearch.setHint("快来搜索看看呢")
        binding.playCartSearch.setOnClickListener {
            ARouter.getInstance().build("/app/search/SearchActivity").navigation()
        }

        // 检查顶部标签页是否已经初始化，如果未初始化，则请求初始化数据
        if (binding.playCartTopTab.tabCount == 0) {
            viewModel.getPlayCartTopNavigationInfo()
        }

        // 请求播放车信息列表数据，这里请求的是默认类型的数据
        viewModel.getPalyCartInfoList("0", 1, 10)
        // 设置播放车信息列表的适配器
        binding.playCartInfo.adapter = playCartInfoAdapter
        // 设置播放车信息列表的布局管理器为线性布局管理器
        binding.playCartInfo.layoutManager = LinearLayoutManager(context)

        // 设置顶部标签页的选中监听器
        binding.playCartTopTab.setOnTabSelectListener(object : OnTabSelectListener {
            // 当标签页再次被选中时的方法，这里未实现具体逻辑
            override fun onTabReselect(position: Int) {
            }

            // 当标签页被选中时的方法
            override fun onTabSelect(position: Int) {
                // 根据选中的标签页位置，请求不同类型的数据
                when (position) {
                    0 -> {
                        viewModel.getPalyCartInfoList("0", 1, 10)
                    }

                    1 -> {
                        // 这里请求的是"new"类型的数据，但参数传递方式未明确，需要进一步确认接口
                        viewModel.getPalyCartInfoList("0", 1, 10, "new")
                    }

                    2 -> {
                        viewModel.getPalyCartInfoList("0", 1, 10)
                    }

                    3 -> {
                        // 这里可能是请求另一种类型的数据，参数"1"可能代表不同的数据类型
                        viewModel.getPalyCartInfoList("1", 1, 10)
                    }
                }
            }
        })
        playCartInfoAdapter.setOnItemClickListener { _, view, position ->
            ARouter.getInstance().build("/app/fragments/PlayCarDetailActivity")
                .withString("postsId",playCartInfoAdapter.data[position].posts_id).navigation()
            viewModel.getPostDetail(playCartInfoAdapter.data[position].posts_id)

         //ToastUtils.showShort("播放详情",playCartInfoAdapter.data[position].create_time.toString())
        }
    }

    override fun iniData() {
        // 观察播放列表顶部导航信息成功的 LiveData 对象
        viewModel.playCartTopNavigationInfoSuccess.observe(this) {
            // 检查绑定的播放列表顶部标签页数量是否小于或等于0
            if (binding.playCartTopTab.tabCount <= 0) {
                // 遍历接收到的数据，为每个条目创建一个 CustomTabEntity 实例并添加到列表中
                it.data.forEach {
                    playCartTopTabsList.add(object : CustomTabEntity {
                        override fun getTabTitle() = it.title // 设置标签页标题
                        override fun getTabSelectedIcon() = 0 // 设置选中状态图标，这里未使用
                        override fun getTabUnselectedIcon() = 0 // 设置未选中状态图标，这里未使用
                    })
                }
            }
            // 设置标签页数据
            binding.playCartTopTab.setTabData(playCartTopTabsList)
        }

        // 观察播放列表顶部导航信息失败的 LiveData 对象，并显示错误信息
        viewModel.playCartTopNavigationInfoFail.observe(this) {
            ToastUtils.showShort(it)
        }

        // 观察播放列表信息成功的 LiveData 对象
        viewModel.playCartInfoSuccess.observe(this) {
            // 更新播放列表信息适配器的数据，并通知数据集发生变化
            //注意此处使用setNewData需要将数据源中的List集合改成MutableList setNewData不能传不可变集合
            playCartInfoAdapter.setNewData(it.data.records)
            playCartInfoAdapter.notifyDataSetChanged()
        }
        // 观察播放列表信息失败的 LiveData 对象，并显示错误信息
        viewModel.playCartInfoFail.observe(this) {
            ToastUtils.showShort(it)
        }
    }

    override fun onPause() {
        super.onPause()
        // 移除观查者以避免内存泄漏或不必要的更新
        viewModel.playCartInfoSuccess.removeObservers(this)
        viewModel.playCartInfoFail.removeObservers(this)
        // 清空播放购物车顶部标签列表以准备加载新数据
        playCartTopTabsList.clear()
        // 清除播放购物车顶部标签的焦点以重置用户界面状态
        binding.playCartTopTab.clearFocus()
    }

    override fun getViewModel() = PlayCartViewModel::class.java

    override fun Layoutid() = R.layout.fragment_paly_cart


}